function _navi_smart_replace
    set -l current_process (commandline -p | string trim)

    if test -z "$current_process"
        commandline -i (navi --print)
    else
        set -l best_match (navi --print --best-match --query "$current_process")

        if not test "$best_match" >/dev/null
            return
        end

        if test -z "$best_match"
            commandline -p (navi --print --query "$current_process")
        else if test "$current_process" != "$best_match"
            commandline -p $best_match
        else
            commandline -p (navi --print --query "$current_process")
        end
    end

    commandline -f repaint
end

if test $fish_key_bindings = fish_default_key_bindings
    bind \cg _navi_smart_replace
else
    bind -M insert \cg _navi_smart_replace
end
